﻿function DocumentPresenter(eventHub) {
    var self = this;
/*=========================================================================================================*/
    this.RegisterEventListeners = function() {
        eventHub.AddEventListener(DocumentEvents.OnDocumentLoaded, function(eventTypes, eventArgs) { self.DocumentLoaded(eventArgs); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentUnloaded, function(eventTypes, eventArgs) { self.DocumentUnloaded(); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentUnloading, function(eventTypes, eventArgs) { self.DocumentUnloading(); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentHistorySelected, function(eventTypes, eventArgs) { self.DocumentHistorySelected(); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentView, function(eventTypes, eventArgs) { self.DocumentView(); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentHistoryLoaded, function(eventTypes, eventArgs) { self.DocumentHistoryLoaded(); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentHistoryUnloaded, function(eventTypes, eventArgs) { self.DocumentHistoryUnloaded(); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentMaximize, function(eventTypes, eventArgs) { self.DocumentMaximize(); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentRestore, function(eventTypes, eventArgs) { self.DocumentRestore(); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentLoading, function(eventTypes, eventArgs) { self.DocumentLoading(); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentCreate, function(eventTypes, eventArgs) { self.DocumentCreate(eventArgs); });
        eventHub.AddEventListener(DocumentEvents.OnDocumentSelect, function(eventTypes, eventArgs) { self.DocumentSelect(eventArgs); });
    };
/*=========================================================================================================*/
    this.DocumentSelect = function(eventArgs) {
        $("#state #selectedDocumentID").val(eventArgs.documentid);

        $("#btnBreakglass").click(function() {
            $('#contentviewer').unblock();
            $.unblockUI();
            if ($("#state #currentDocumentID").val() != $("#state #selectedDocumentID").val()) {
                LoadDocument($("#state #selectedDocumentID").val());
            }
            else {
                var eventArgs = { refreshdata: false, reloadHistory: false };
                eventHub.RaiseEvent(DocumentEvents.OnDocumentLoaded, eventArgs);
            }
        });

        if (eventArgs.sensitive == "true") {
            $('#contentviewer').block({
                message: $("#breakglass"),
                centerY: false,
                css: { border: '0px solid #a00',  top: '10px' },
                overlayCSS: { backgroundColor: '#eee', opacity: 1 }
            })
        }
        else {
            LoadDocument(eventArgs.documentid);
        }
    }
/*=========================================================================================================*/
    this.DocumentCreate = function(eventArgs) {
        var url = "/Home/Create/?DocumentType=" + eventArgs.documentType;
        url = "http://localhost:8080/forms/nhs/corresponance/discharge-advice-letter/v1/?documentId=00000000-0000-0000-0000-000000000000&sessionId=00000000-0000-0000-0000-000000000000&orbeon-embeddable=true&subjectIdentifiers=HospitalNumber\Z100080,NHS\3795624191&duplicate=False&wcpsessionid=45hklsnro2n1rx45x1qx2455";
        var ajaxOptions = {
            url: url,
            cache: false,
            type: "GET",
            documentType: "html",
            success: CreateSuccess,
            error: CreateFailure
        };
        $.ajax(ajaxOptions);
    }
/*=========================================================================================================*/
    function CreateSuccess(data) {
        $("#documentcontainer").html(data); 
    };
/*=========================================================================================================*/
    function CreateFailure(xhr, description, error) {
        alert("StatusText:" + xhr.statusText);
        alert("readyState:" + xhr.readyState);
        alert("status:" + xhr.status);
        alert("responseXML :" + xhr.responseXML);
        alert("responseText :" + xhr.responseText);
    };
/*=========================================================================================================*/
    this.DocumentLoaded = function(eventArgs) {
        self.UpdateDocumentControls();
        $("#state #currentDocumentID").val($("#state #selectedDocumentID").val());
        if (eventArgs.refreshdata != false)
            $("#documentcontainer").html(eventArgs.data);
        $("#restoredocumentbutton").addClass("disabled");
        $("#maximizedocumentbutton").removeClass("disabled");
        $("#showdocumentbutton").addClass("disabled");
        $("#showhistorybutton").removeClass("disabled");
    };
/*=========================================================================================================*/
    this.DocumentLoading = function() {
    };
/*=========================================================================================================*/    
    this.DocumentView = function() {
        $(".documentactionbutton").removeClass("disabled");
        $(".documenthistoryactionbutton").addClass("disabled");
        $("#showhistorybutton").removeClass("disabled");
        // Now show the document container
        $("#documentcontainer").removeClass("hidden");
        // Hide the history container
        $("#historycontainer").addClass("hidden");
    };
/*=========================================================================================================*/
    this.UpdateDocumentControls = function() {
        $(".documentactionbutton").removeClass("disabled");
        // hide the history panel
        $("#historycontainer").addClass("hidden");
        // Show document panel
        $("#documentcontainer").removeClass("hidden");
    };
/*=========================================================================================================*/    
    this.DocumentUnloading = function() {
        // Document is being uloaded, so all items of class documentactionbutton should be disabled
        $(".documentactionbutton").addClass("disabled");
        $("#maximizedocumentbutton").addClass("disabled");
        $("#restoredocumentbutton").addClass("disabled");
    };
/*=========================================================================================================*/
    this.DocumentHistoryLoaded = function() {
        $("#showhistorybutton").removeClass("disabled");
    };
/*=========================================================================================================*/
    this.DocumentHistoryUnloaded = function() {
        $("#showhistorybutton").addClass("disabled");
        $("#showdocumentbutton").addClass("disabled");
    };

/*=========================================================================================================*/
    this.DocumentHistorySelected = function() {
        // Document history has been selected, so update action buttons
        $(".documentactionbutton").addClass("disabled");
        $(".documenthistoryactionbutton").removeClass("disabled");
        $("#showhistorybutton").addClass("disabled");
        // Now hide the document container
        $("#documentcontainer").addClass("hidden");
        // Show the history container
        $("#historycontainer").removeClass("hidden");
    };
/*=========================================================================================================*/    
    this.DocumentUnloaded = function() {

    };
/*=========================================================================================================*/    
    this.DocumentMaximize = function() {
        $("#leftcolumn").addClass("hidden");
        $("#centerlist").addClass("hidden");
        $(".horzslider").addClass("hidden");
        $("#centercolumn").css("margin-left", "0px");
        $("#restoredocumentbutton").removeClass("disabled");
        $("#maximizedocumentbutton").addClass("disabled");
    };
/*=========================================================================================================*/    
    this.DocumentRestore = function() {
        $("#leftcolumn").removeClass("hidden");
        $("#centerlist").removeClass("hidden");
        $(".horzslider").removeClass("hidden");
        $("#centercolumn").css("margin-left", "320px");
        $("#maximizedocumentbutton").removeClass("disabled");
        $("#restoredocumentbutton").addClass("disabled");
    };
    
/*=========================================================================================================*/
    function LoadDocument(documentid) {
        $("#state #currentDocumentID").val($("#state #selectedDocumentID").val());
        eventHub.RaiseEvent(DocumentEvents.OnDocumentUnloading);
        eventHub.RaiseEvent(DocumentEvents.OnDocumentLoading);
        var url = "/Home/Document/" + documentid;
        var ajaxOptions = {
            url: url,
            cache: false,
            async:true,
            type: "POST",
            success: LoadDocumentSuccess,
            error: LoadDocumentFailure
        };
        $.ajax(ajaxOptions);
    }

/*=========================================================================================================*/   
    function LoadDocumentSuccess(data) {
        var eventArgs = { data: data };
        eventHub.RaiseEvent(DocumentEvents.OnDocumentLoaded, eventArgs);
    };
/*=========================================================================================================*/   
    function LoadDocumentFailure(xhr, description, error) {
        // log it, or do something...
    };    
    
};
